package com.zy.AOP.utils;

//切面类，日志安全信息

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;

import java.util.Date;

//切面类
@Component("myAspect")//标识Bean
@Aspect//声明切面类,织入关系
public class Logger
{
    //前置通知
    @Before("execution(* com.zy.AOP.Dao.*.*(..))")
    public void beforeExec()
    {
        System.out.println("-----方法被调用前----");
    }
    //@AfterReturning，发生异常后不被执行
    //后置通知，不管是否有异常，都会被执行
    @After("execution(* com.zy.AOP.Dao.*.*(..))")
    public void afterExec()
    {
        System.out.println("-----方法被调用之后----");
    }
    //抛出异常时的通知
    @AfterThrowing("execution(* com.zy.AOP.Dao.*.*(..))")
    public void afterThrow()
    {
        System.out.println("------抛出异常时被调用-----");
    }

    @Around("execution(* com.zy.AOP.Dao.*.get*(..))")
    public Object around(ProceedingJoinPoint joinPoint) throws Throwable
    {
        //方法被调用之前
        System.out.println("-----方法被调用之前---");
        Date begin=new Date();

        //执行目标方法
        Object proceed = joinPoint.proceed(joinPoint.getArgs());
        //返回值
        Date end=new Date();
        System.out.println("方法执行时间；"+(end.getTime()-begin.getTime()));
        //方法被调用之后
        System.out.println("-----方法被调用之后---");

        return proceed;
    }
}
